﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using System.Configuration;
using System.Data.SqlClient;

namespace GestorDeFlotasDesktop.Classes
{
    public class Roles
    {
        public List<Rol> getRolesHabilitados() {
            List<Rol> lstRoles = new List<Rol>();
            SqlDataReader rdrLector;
            Rol oRol;
            Funcionalidad oFuncionalidad;
            rdrLector = SqlInterface.ExecuteReader("SQUIRTLE.spTraerTodosRolesHabilitados");

            if (rdrLector.HasRows)
            {
                rdrLector.Read();
                oRol = new Rol();
                oRol.strNombre = rdrLector.GetString(rdrLector.GetOrdinal("ROL_NOMBRE"));
                oRol.intCodigo = rdrLector.GetInt32(rdrLector.GetOrdinal("ROL_CODIGO"));
                oRol.blnAsignado = false;
                int intAuxCodigoRol = oRol.intCodigo;
                oRol.lstFuncionalidad = new List<Funcionalidad>();
                oFuncionalidad = new Funcionalidad();
                oFuncionalidad.intCodFuncionalidad = rdrLector.GetInt32(rdrLector.GetOrdinal("FUNCIONALIDAD_CODIGO"));
                oFuncionalidad.strFuncionalidad = rdrLector.GetString(rdrLector.GetOrdinal("FUNCIONALIDAD_NOMBRE"));
                oRol.lstFuncionalidad.Add(oFuncionalidad);
                
                while (rdrLector.Read())
                {
                    if (rdrLector.GetInt32(rdrLector.GetOrdinal("ROL_CODIGO")) == intAuxCodigoRol)
                    {
                        oFuncionalidad = new Funcionalidad();
                        oFuncionalidad.intCodFuncionalidad = rdrLector.GetInt32(rdrLector.GetOrdinal("FUNCIONALIDAD_CODIGO"));
                        oFuncionalidad.strFuncionalidad = rdrLector.GetString(rdrLector.GetOrdinal("FUNCIONALIDAD_NOMBRE"));
                        oRol.lstFuncionalidad.Add(oFuncionalidad);
                    }
                    else
                    {
                        lstRoles.Add(oRol);
                        oRol = new Rol();
                        oRol.strNombre = rdrLector.GetString(rdrLector.GetOrdinal("ROL_NOMBRE"));
                        oRol.intCodigo = rdrLector.GetInt32(rdrLector.GetOrdinal("ROL_CODIGO"));
                        intAuxCodigoRol = oRol.intCodigo;
                        oRol.blnAsignado = false;
                        oRol.lstFuncionalidad = new List<Funcionalidad>();
                    }
                }
                lstRoles.Add(oRol);
            }
            rdrLector.Close();
            return lstRoles;
        
        }
        public List<Rol> getRolesUsuario(string strUsuario)
        {
            List<Rol> lstRoles = new List<Rol>();
            SqlDataReader rdrLector;
            Rol oRol;
            Funcionalidad oFuncionalidad;
            List<SqlParameter> ParameterList = new List<SqlParameter>();
            ParameterList.Add(new SqlParameter("@usuario", strUsuario));
            rdrLector = SqlInterface.ExecuteReader("SQUIRTLE.spCargarPermisos", ParameterList);

            if (rdrLector.HasRows)
            {
                rdrLector.Read();
                oRol = new Rol();
                oRol.strNombre = rdrLector.GetString(rdrLector.GetOrdinal("ROL_NOMBRE"));
                oRol.intCodigo = rdrLector.GetInt32(rdrLector.GetOrdinal("ROL_CODIGO"));
                int intAuxCodigoRol = oRol.intCodigo;
                oRol.blnAsignado = false;
                oRol.lstFuncionalidad = new List<Funcionalidad>();
                oFuncionalidad = new Funcionalidad();
                oFuncionalidad.intCodFuncionalidad = rdrLector.GetInt32(rdrLector.GetOrdinal("FUNCIONALIDAD_CODIGO"));
                oFuncionalidad.strFuncionalidad = rdrLector.GetString(rdrLector.GetOrdinal("FUNCIONALIDAD_NOMBRE"));
                oRol.lstFuncionalidad.Add(oFuncionalidad);

                while (rdrLector.Read())
                {
                    if (rdrLector.GetInt32(rdrLector.GetOrdinal("ROL_CODIGO")) == intAuxCodigoRol)
                    {
                        oFuncionalidad = new Funcionalidad();
                        oFuncionalidad.intCodFuncionalidad = rdrLector.GetInt32(rdrLector.GetOrdinal("FUNCIONALIDAD_CODIGO"));
                        oFuncionalidad.strFuncionalidad = rdrLector.GetString(rdrLector.GetOrdinal("FUNCIONALIDAD_NOMBRE"));
                        oRol.lstFuncionalidad.Add(oFuncionalidad);
                    }
                    else
                    {
                        lstRoles.Add(oRol);
                        oRol = new Rol();
                        oRol.strNombre = rdrLector.GetString(rdrLector.GetOrdinal("ROL_NOMBRE"));
                        oRol.intCodigo = rdrLector.GetInt32(rdrLector.GetOrdinal("ROL_CODIGO"));
                        intAuxCodigoRol = oRol.intCodigo;
                        oRol.blnAsignado = false;
                        oRol.lstFuncionalidad = new List<Funcionalidad>();
                    }
                }
                lstRoles.Add(oRol);
            }
            rdrLector.Close();
            return lstRoles;

            
        }
        public List<Rol> getRoles()
        {
            List<Rol> lstRoles = new List<Rol>();
            SqlDataReader rdrLector;
            Rol oRol;
            Funcionalidad oFuncionalidad;
            rdrLector = SqlInterface.ExecuteReader("SQUIRTLE.spTraerTodosRoles");

            if (rdrLector.HasRows)
            {
                rdrLector.Read();
                oRol = new Rol();
                oRol.strNombre = rdrLector.GetString(rdrLector.GetOrdinal("ROL_NOMBRE"));
                oRol.intCodigo = rdrLector.GetInt32(rdrLector.GetOrdinal("ROL_CODIGO"));
                oRol.blnHabilitado = rdrLector.GetBoolean(rdrLector.GetOrdinal("ROL_HABILITADO"));
                int intAuxCodigoRol = oRol.intCodigo;
                oRol.blnAsignado = false;
                oRol.lstFuncionalidad = new List<Funcionalidad>();
                oFuncionalidad = new Funcionalidad();
                oFuncionalidad.intCodFuncionalidad = rdrLector.GetInt32(rdrLector.GetOrdinal("FUNCIONALIDAD_CODIGO"));
                oFuncionalidad.strFuncionalidad = rdrLector.GetString(rdrLector.GetOrdinal("FUNCIONALIDAD_NOMBRE"));
                oRol.lstFuncionalidad.Add(oFuncionalidad);

                while (rdrLector.Read())
                {
                    if (rdrLector.GetInt32(rdrLector.GetOrdinal("ROL_CODIGO")) == intAuxCodigoRol)
                    {
                        oFuncionalidad = new Funcionalidad();
                        oFuncionalidad.intCodFuncionalidad = rdrLector.GetInt32(rdrLector.GetOrdinal("FUNCIONALIDAD_CODIGO"));
                        oFuncionalidad.strFuncionalidad = rdrLector.GetString(rdrLector.GetOrdinal("FUNCIONALIDAD_NOMBRE"));
                        oRol.lstFuncionalidad.Add(oFuncionalidad);
                    }
                    else
                    {
                        lstRoles.Add(oRol);
                        oRol = new Rol();
                        oRol.strNombre = rdrLector.GetString(rdrLector.GetOrdinal("ROL_NOMBRE"));
                        oRol.intCodigo = rdrLector.GetInt32(rdrLector.GetOrdinal("ROL_CODIGO"));
                        oRol.blnHabilitado = rdrLector.GetBoolean(rdrLector.GetOrdinal("ROL_HABILITADO"));
                        oRol.blnAsignado = false;
                        intAuxCodigoRol = oRol.intCodigo;
                        oRol.lstFuncionalidad = new List<Funcionalidad>();
                    }
                }

                lstRoles.Add(oRol);

            }
            rdrLector.Close();
            return lstRoles;

        }
        public int insert(string nombreRol)
        {
            SqlDataReader rdrLector;
            List<SqlParameter> parameterList = new List<SqlParameter>();
            parameterList.Add(new SqlParameter("@nombreRol", nombreRol));
            rdrLector = SqlInterface.ExecuteReader("SQUIRTLE.spCrearRol", parameterList);
            if (rdrLector.HasRows)
            {
                rdrLector.Read();
                return rdrLector.GetInt32(rdrLector.GetOrdinal("ROL_CODIGO"));
            }
            return 0;
        }
        public int insertRolFunc(int rol, int funcionalidad)
        {
            List<SqlParameter> parameterList = new List<SqlParameter>();
            parameterList.Add(new SqlParameter("@rol", rol));
            parameterList.Add(new SqlParameter("@func", funcionalidad));
            return SqlInterface.ExecuteNonQuery("SQUIRTLE.spAltaRolFuncionalidad", parameterList);
        }
        public int deleteRolFunc(int rol, int funcionalidad)
        {
            List<SqlParameter> parameterList = new List<SqlParameter>();
            parameterList.Add(new SqlParameter("@Rol", rol));
            parameterList.Add(new SqlParameter("@Func", funcionalidad));
            return SqlInterface.ExecuteNonQuery("SQUIRTLE.spBajaRolFuncionalidad", parameterList);
        }
        public int updateRol(Rol oRol)
        {
            List<SqlParameter> parameterList = new List<SqlParameter>();
            parameterList.Add(new SqlParameter("@rol", oRol.intCodigo));
            parameterList.Add(new SqlParameter("@nombre", oRol.strNombre));
            parameterList.Add(new SqlParameter("@habilitado", oRol.blnHabilitado));
            for (int a = 0; a < oRol.lstFuncionalidad.Count; a++)
            {
                this.insertRolFunc(oRol.intCodigo, oRol.lstFuncionalidad[a].intCodFuncionalidad);
            }
            return SqlInterface.ExecuteNonQuery("SQUIRTLE.spModificarRol", parameterList);
        }
    }
}
